对于部署在虚拟节点上的Pod应用,在应用迭代过程中,因为解决bug或者增加功能特性而制作新的镜像后,您可能需要修改镜像,同时为了不影响业务,需要保持Pod的IP不变。本文介绍如何通过kubectl命令修改Pod的容器镜像,并保持Pod的IP不变。
前提条件
已准备好要更新的镜像,且已将镜像上传到镜像仓库中。
操作步骤
下文以部署Nginx的Pod为例,介绍如何通过kubectl命令,将容器镜像从nginx:1.7.9
修改为nginx:1.9.6
,并保持Pod的IP不变。
说明
体验以下示例请确保集群所属VPC已创建公网NAT网关并配置SNAT,以便可以拉取公网镜像。
创建一个ECI Pod。
kubectl create -f nginx.yaml
nginx.yaml的内容示例如下,使用的容器镜像为
nginx:1.7.9
。apiVersion: v1 kind: Pod metadata: name: nginx namespace: default alibabacloud.com/eci: "true" spec: containers: - image: nginx:1.7.9 imagePullPolicy: Always name: nginx
查询Pod信息。
查询Pod的IP。
kubectl get pod/nginx -n default -o wide
返回示例如下,可以看到Pod的IP为172.16.22.193。
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 5m5s 172.16.22.193 virtual-kubelet-cn-beijing-e <none> <none>
查询Pod的镜像tag。
kubectl get pod/nginx -n default -o=custom-columns='IMAGE:spec.containers[*].image'
返回示例如下,可以查看Pod的容器镜像为
nginx:1.7.9
。IMAGE nginx:1.7.9
选择以下一种方式修改镜像。
kubectl patch
执行kubectl命令直接修改容器镜像tag。
kubectl patch pod nginx -p '{"spec":{"containers":[{"name": "nginx","image": "nginx:1.9.6"}]}}'
kubectl edit
执行kubectl edit命令编辑Pod,直接修改容器镜像tag。
kubectl edit pod/nginx -o yaml
kubectl apply
打开Pod对应的nginx.yaml配置文件,修改容器镜像tag,然后执行kubectl apply命令重新部署Pod。
kubectl apply -f nginx.yaml
查看修改后的Pod信息。
查询Pod的IP。
kubectl get pod/nginx -n default -o wide
返回示例如下,可以看到Pod的IP与修改前一致,为172.16.22.193。
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 1 19m 172.16.22.193 virtual-kubelet-cn-beijing-e <none> <none>
查询Pod的镜像tag。
kubectl get pod/nginx -n default -o=custom-columns='IMAGE:spec.containers[*].image'
返回示例如下,可以查看Pod的容器镜像已经修改为
nginx:1.9.6
。IMAGE nginx:1.9.6
文档内容是否对您有帮助?